package com.woniuxy.consume;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class TopicConsume {
    /**
     * 怎么手动应答
     * channel:消费者获取队列中的消息（先建立AMQP进程），但是每次获取消息都需要开启进程，太慢了
     *         可以在进程中开启很多线程获取数据，每个线程就是channel。
     *         也就是消息的传输通道
     * Message：mq对消息的封装类，主要有messageProperties和body
     *         body：就是发送的消息
     *         messageProperties：封装了一些属性，消息过期时间，消息优先级，消息唯一编号
     * @param msg
     */
    @RabbitListener(queues = "topicQueueA")
    public void receiveA(String msg, Message message, Channel channel){

        try {
            System.out.println("消费者A收到："+msg);
            //参数1：消息的唯一编号  参数2：是否批量确认
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);//消费者确认消息
        } catch (Exception e) {
            e.printStackTrace();
            //拒绝消息
            //参数3：该消息是否重新放回队列(死信)
            try {
                channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,false);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }



//    @RabbitListener(queues = "topicQueueB")
//    public void receiveB(String msg){
//        System.out.println("消费者B收到："+msg);
//    }
}
